<?php
/**
 * 
 * IndicadoresGOnapi ...
 * @author Algenis Volquez
 *
 */
class IndicadoresGOnapi extends Controller
{
	private $_semanaArray;
	private $_semanaActual;
	private $_companias;
	const ETAPA = 'ONAPI';
	const HORAS_PERMITIDAS = 192;
	private $_detalles = array();
	private $_idObjetadas = array();
	
	public function __construct()
	{
		parent::Controller();
		$this->load->library(array('chgraficos','chcalendario'));
		$this->load->model(array('mcompania', 'mprocesos','mservicios', 'usuarios', 'mresponsable','companiashistoricaactivasmodel',
								 'mestatus', 'metapas', 'mmodeloetapas', 'mmodeloservicios', 'companiahistorico'));
		
		$this->_semanaActual = $this->input->post('cantSemana') ? $this->input->post('cantSemana') : 9;
		$this->session->set_userdata('semanaActual',$this->_semanaActual);
		
		$this->_semanaArray = $this->chcalendario->semana($this->_semanaActual);
	}
	
	public function index()
	{		
		$this->load->view('second', array(  'content_page'					=> 'indicadoresgonapi_view', 
											'menutop' 						=> 	0,
											'semanaFiltro' 					=> 	9,
											'efectividadOnapiEntreCantidad'	=>	$this->getEfectividadOnapiEntreCantidad(),
											'promedioDiasOnapi'				=>	$this->getPromedioDeDiasOnapi(),
											'aprovadosVsObjetados'			=> 	$this->getAprovadosVsObjetados(),
											'objecionesPorServicio'			=> 	$this->getObjecionesPorServicio(),
											'objetadosVsPorcentaje'			=> 	$this->getObjetadosVsPorcentaje(),
											'promedioDiasRetrazados' 		=> 	$this->getPromedioDiasRetrazados(),
											'detalles_gonapi'				=> 	$this->_detalles,
											'detalles_retrazo'				=>	$this->_detallesRetrazo,
											'promedioUltimasSemanas'		=> 	$this->getPromedioUltimasSemanas()));
	}
	
	/**
	 *VERIFICA LA ULTIMA ETAPA DE UNA COMPANIA PARA SETEAR EL CAMPO EtapaActual DE LA 
	 *TABLA SC_Procesos DE LAS COMPANIAS ACTIVAS
	 *nota: solo se uso para reparar datos viejos  
	 */
	
	/*public function setEtapaActualProceso()
	{
			
		   // $companias = $this->mcompania->LoadCompanias();
			$companias = $this->mprocesos->ObtenerProcesosAgrupados('IdCompania');
		
		    foreach($companias as $compania){
		    	$idProceso = $this->mprocesos->loadLastProceso($compania->getIdCompania());
		    	$proceso_obj = $this->mprocesos->loadProcesoById($idProceso);
		    	$this->mprocesos->setEtapaActualProceso($compania->getIdCompania(), $proceso_obj->getIdEtapa());
					   
		    }
		    echo 'El proceso se ejecuto exitosamente!!!';
	}*/
	
	/**
	 * 
	 * VERIFICA LA ETAPA EN LA QUE SE ENCUENTRA UN PROCESO PARA SETEAR EL CAMPO clasificacion_proceso
	 * DE LA TABLA SC_Procesos DE TODAS LAS COMPANIAS
	 */
	/*public function setClasificacionProceso()
	{
		$procesos = $this->mprocesos->LoadProcesos();
		$etapas = $this->metapas->LoadEtapas();
		
		foreach ($procesos as $proceso){
	
			$idClasificacionProceso = 0;
			
			foreach($etapas as $etapa){
				
				if($proceso->getIdEtapa() == $etapa->GetIdEtapa()){
					$idClasificacionProceso = $etapa->getClasificacionProceso();
					break;
				}
			}
			
			$this->mprocesos->setClasificacionProceso($proceso->getIdProceso(), $proceso->getIdEtapa(), $idClasificacionProceso);
		}
		
		
		echo '<br/>El proceso se ejecuto exitosamente!!!';
	}*/
	
	/**
	 * 
	 * 
	 * retorna un listado con las 5 companias mas viejas
	 * que se encuentran en la etapa de ONAPI Y OBJECION ...
	 * @param unknown_type $cantSemana
	 */
	
	public function getData($cantSemana = 9)
	{
		$page = $this->input->post('page') ? $this->input->post('page') : 1;
		$sortname = $this->input->post('sidx') ? $this->input->post('sidx') : 'IdCompania';
		$sortorder = $this->input->post('sord') ? $this->input->post('sord') : 'asc';
		$limit = $this->input->post('rows') ? $this->input->post('rows') : 200;
		
		$start = $limit * $page - $limit;
		
		if($start < 0) $start = 0;
		 
		$referencia = false;
		$etapa      = false;
		$dataEtapa = false;

		header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
		header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
		header("Cache-Control: no-cache, must-revalidate" );
		header("Pragma: no-" );
		
		$filtroFecha = "";	
		
		foreach ($this->_semanaArray as $semana => $fecha){
			
       		$fechaI = explode(" ", $fecha[0]);
       		$filtroFecha = $fechaI[0];
       		
       		break;
       	}
       	$filtroEtapas = array(1,25);
       	$this->_companias = $this->mcompania->loadOlderCompaniasByStage($filtroFecha, $filtroEtapas, 5);
     
       	$totalRecords = count($this->_companias);
	
		$totalPages = ceil($totalRecords/$limit);
		if ($page > $totalPages) $page = $totalPages;

		$json_output = array(
		'page'		=> $page,
		'total'		=> $totalPages,
		'records'	=> $totalRecords,
		'rows'		=> array());
		
		if($this->_companias != false){
		     foreach($this->_companias as $objeto){
		     $servicios = $this->mservicios->LoadServicioById($objeto->getIdServicio());
		     
		     $usuario = $this->usuarios->LoadUsuarioById($objeto->getIdUsuario());
		     
		     $responsable=$this->mresponsable->LoadEstatusById($objeto->getIdResponsable());
		     
		     $proceso = $this->mprocesos->loadLastProceso($objeto->getIdCompania());
		    	 
		     $procesoFecha = $this->mprocesos->loadProcesosByArray(array('IdCompania' => $objeto->getIdCompania()));
		    	
			 $procesoFecha = array_reverse($procesoFecha);
			 
		     $procesoDgii = $this->mprocesos->loadProcesoById($proceso);
		     
			 $procesos 	= $this->mprocesos->loadProcesoById(intval($proceso));
			 
			 $estatus 	= $this->mestatus->LoadEstatusById($procesos->getIdEstatus());
			 
			 $etapa 	= $this->metapas->LoadEtapaById($objeto->getIdUltimaEtapa());
			 		
			 if ($objeto->getIdServicio() == 7 && $procesoDgii->getIdEtapa() == 3) {
				continue;
			 }
			 foreach ($procesoFecha as $k){
			 	  if ($procesoDgii->getIdEtapa() == $k->getIdEtapa()){
			 	     	$fechaProcesoScuenci = $k->getFechaSys();  
			 	     	
			 	  }else{
			 	  	
			 	  	 break;
			 	  }         
			 }
			 $ultimatransaccion = $this->chcalendario->calcularDias($fechaProcesoScuenci);
			
		     $colores_array_etapa = $this->mmodeloetapas->loadModeloEtapas();
		     
			 $colores_etapa=$colores_array_etapa[0];
			 
			 $bruto_etapa = ($ultimatransaccion/$etapa->GetTiempoEstimado())*100;
			
			 $dias =  $this->chcalendario->calcularDias($objeto->getFechaUsrCompania());
			 
			 $porciento_bruto = ($dias/$servicios->getTiempoServicio())*100;
			 
			  if ($bruto_etapa >= $colores_etapa->getVerdeModelo() and $bruto_etapa < $colores_etapa->getAmarilloModelo() or $bruto_etapa==0 or $bruto_etapa<0){
			 	$imagen_etapa = "<img src='http://company24h.com/c24h/public/images/1.png'/>";
			 	
			 }elseif($bruto_etapa>=$colores_etapa->getAmarilloModelo() and $bruto_etapa<$colores_etapa->getRojoModelo()){
			 	$imagen_etapa="<img src='http://company24h.com/c24h/public/images/2.png'/>";
			 	
			 }else{
				$imagen_etapa="<img src='http://company24h.com/c24h/public/images/3.png'/>";
			 }
			 
			 $colores_array_servicio = $this->mmodeloservicios->loadModeloServicios();
			 $colores_servicios = $colores_array_servicio[0];
			
			 if (($porciento_bruto>=$colores_servicios->getVerdeModelo() and $porciento_bruto < $colores_servicios->getAmarilloModelo()) or $porciento_bruto<=0){
				$imagen="<img src='http://company24h.com/c24h/public/images/1.png'/>";
				
			 }elseif ($porciento_bruto >=$colores_servicios->getAmarilloModelo() and $porciento_bruto < $colores_servicios->getRojoModelo()){
				$imagen="<img src='http://company24h.com/c24h/public/images/2.png'/>";
			 }else{
				$imagen="<img src='http://company24h.com/c24h/public/images/3.png'/>";
			 }
			 $arr = $json_output['rows'][] = array(
											          'IdCompania'            => $objeto->getIdCompania(),
											          'NombreCompania'        => '<strong>'.$objeto->getNombreCompania().'</strong>',
											     	  'IdServicio'            => $servicios->getNombreServicio(),
											     	  'cServicio'             => $objeto->getClasificacionS(),
											          'FechaUsrCompania'      => $objeto->getFechaUsrCompania(),
											     	  'IdEtapa'               => $etapa->GetNombre(),
											     	  'dias'                  => intval($ultimatransaccion),
											          'Etapa'                 => $imagen_etapa,
											          'Total'                 => $imagen,
											     	  'User'                  => $usuario->getUsernameUsuario(),
											     	  'Responsable'           => $responsable->getNombre()
										      		);
		    }
		}
		$a=json_encode($json_output);
		$a=str_replace('\\','',$a);
		echo $a;
	}
	
	/**
	 * 
	 * Retorna un grafico tipo BARRA/LINEAL con la efectividad
	 * de las companias que se encuentran en etapa ONAPI por semanas
	 * vs la cantidad de esas companias
	 */
	
	public function getEfectividadOnapiEntreCantidad()
    {
     		
     		 $registro = array();
     		 $strCat = "<categories>";
     		 
     		 $etapas = 1;
			
             foreach($this->_semanaArray as $semana => $fecha){
					
		          $fechaI = $fecha[0];
		          $fechaF = $fecha[1];
		          $filtroFecha['inicial'] = $fechaI;
		          $filtroFecha['final']   = $fechaF;
		          $resurtado = 0;
		          $totalDeRegistros = 0;
		          $valor = 0;
		         
		          $semanaDetalle = explode("-", $semana);
		          
		          $where = array("FechaSysProceso >= "   =>$fechaI,
					             "FechaSysProceso <= "   =>$fechaF);
		          				 					
		          $strCat .= "<category label='" . $semanaDetalle[0]."'/>";

		          $companiasProcesos = $this->mprocesos->ObtenerProcesosAgrupados('IdCompania', $etapas, $filtroFecha);
		         
		          if(is_array($companiasProcesos)){
		    
		        
		          foreach ($companiasProcesos as $registroDetallado){

		          	    $horasProceso = 0;
		          	
		          	    if ($this->mprocesos->obtenerPrimerProsesoPorEtapa($registroDetallado->getIdEtapa(), $registroDetallado->getIdCompania()) != $registroDetallado->getIdProceso())
		          	    	continue;
		          	    
		          	    
						$totalDeRegistros++;
		          	    $tiempoEstimado =  $this->metapas->LoadEtapaById($registroDetallado->getIdEtapa())->GetTiempoEstimado();  
						
		          	    $todosProcesos = $this->mprocesos->loadProcesosPorIdCompania($registroDetallado->getIdCompania(), $registroDetallado->getIdEtapa());
		          	    $datos = array();
		          	    $cantidadHoras = 0;
		          	    foreach ($todosProcesos as $procesosDetalles){
		          	    	
		          	       $fechaFinal = ($procesosDetalles->getFechaS() == '0000-00-00 00:00:00') ? date("Y-m-d H:i:s"):$procesosDetalles->getFechaS();
		          	    	
		          	       $horasProceso += $this->chcalendario->calcularHoras($procesosDetalles->getFechaProceso(), $fechaFinal);
		          	   
		          	    $etpas = $this->metapas->LoadEtapaById($procesosDetalles->getIdEtapa());
		          	    $companias = $this->companiashistoricaactivasmodel->loadRegistroById($procesosDetalles->getIdCompania());
		          	   

						$cantidadHoras +=number_format($horasProceso, 2, '.', '');
					   
		          	  }
		          	  	
		          	$resurtado = ($horasProceso > ($tiempoEstimado*24)) ? 0:1;
		          	$datos['semanaActual'] = $semana;
		                  //$datos['referencia'] = $companias->getNombre();
					$datos['etapa'] = $etpas->GetNombre();
					$datos['horas_consumidas'] = $cantidadHoras;
					$datos['horas_permitidas'] = $tiempoEstimado*24;
					$datos['diferencia'] = intval($datos['horas_permitidas']) - intval($datos['horas_consumidas']);
					$datos['valoracion'] = $resurtado;
					
					
					if($resurtado > 0){
		                	
								$valor += $resurtado;	
								
						}
							$this->_detalles[] = $datos;
							  
		             }
		        }
		         
		        $valorBarra = ($totalDeRegistros > 0)?($valor/$totalDeRegistros):0;
		   		$valorBarra = $valorBarra * 100;
		   		$valorBarra = number_format($valorBarra, 2);
		   		
		   		$registro[$semana]["companias"] = $valorBarra; 
		          
		        $registro[$semana]["cantidad"] = $totalDeRegistros;
		      
		     } 
		     
		 $strCat .= "</categories>";
		 
		 $strEfectividad = "<dataset seriesName='Efectividad'>";
		 $strCantidad    = "<dataset  seriesName='Cantidad' parentYAxis='S'>";
	
		 
		 foreach ($registro as $semana){
		     $strEfectividad  .= "<set value='".$semana["companias"]."'/>";
		     $strCantidad     .= "<set value='".$semana["cantidad"]."'/>";
		  
		 }
		 
		 	$strEfectividad  .= "</dataset>";
		 	$strCantidad  .= "</dataset>";
		
		 
		   $strCat .= $strEfectividad;
		   $strCat .= $strCantidad;
		             
     		
			$strXML  = "<chart palette='1' caption='Efectividad Compa&ntilde;ias ONAPI Vs Cantidad por Semana' showLabels='1' showvalues='0'  sYAxisValuesDecimals='2' connectNullData='0' PYAxisName='' SYAxisName=''  numberSuffix='%2525'  numDivLines='4' formatNumberScale='0'>";
			$strXML .=$strCat;
			$strXML .= "</chart>";
			return $this->chgraficos->renderChartHTML(base_url()."public/swf_charts/MSColumn3DLineDY.swf", "ChartId54", $strXML, "sACsa", 499,250, 0, 0);
		
     }
     
     //		CALCULA LA CANTIDAD DE HORAS
     //		CONSUMIDAS A PARTIR DE 2 DETERMINADAS FECHAS
     
     private function _calcularHorasConsumidas($idCompania, $filtroSemana = false, $etapa = false)
     {
     	$horasConsumidas = 0;
     	
     	$process_array = $this->mprocesos->loadProcesosPorIdCompania($idCompania, $etapa, 0, $filtroSemana);
     	
     	foreach ($process_array as $process_obj) {
     		$fechas = date("Y-m-d H:i:s");
     		$fechas = ($process_obj->getFechaS() == '0000-00-00 00:00:00')?$fechas: $process_obj->getFechaS();
     		$horasConsumidas += $this->chcalendario->calcularHoras($process_obj->getFechaProceso(), $fechas);
     	}
     	return intval($horasConsumidas);
     }

	/**
	 * 
	 * RETORNA UN GRAFICO DE TIPO LINEAL CON EL PROMEDIO DE DIAS DE LAS 
	 * COMPANIAS QUE ESTAN EN ONAPI ...
	 */
     
	public function getPromedioDeDiasOnapi()
	{
		$registro = array();
	
		$companias = array();
		
		$strCat = "<categories>";
		$totalTarget = 0;
		$promedioTarget = 0;
		foreach($this->_semanaArray as $semana => $fecha){
			
			$filtroSemana ['inicial'] = $fecha [0];
			$filtroSemana ['final'] = $fecha [1];
			
			
			
			$semanaDetalle = explode ( "-", $semana );
			
			$strCat .= "<category label='" . $semanaDetalle [0] . "'/>";
			
			//TODAS LAS COMPANIAS QUE SE ENCUENTRAN EN ONAPI
			
			$companiasProcesos = $this->mprocesos->ObtenerProcesosAgrupados('IdCompania', 1, $filtroSemana, false, 0);
		  
			$idCompanais = array();
			if(is_array($companiasProcesos)){
				foreach($companiasProcesos as $compania){
					    /*
			   			 * Validacion de el primer proceso
			   			 * si el id_proceso del registro $companiasProcesos es diferente 
			   			 * de su primere id_proceso de la etapa.  
			   			 * */
			   			if ($compania->getIdProceso() != $this->mprocesos->obtenerPrimerProsesoPorEtapa($compania->getIdEtapa(), $compania->getIdCompania()))
			   			    continue;
					
					$proceso = $this->mprocesos->loadLastProcesosPorEtapa($compania->getIdCompania(), 1);
					$proceso_obj = $this->mprocesos->loadProcesoById(intval($proceso));
					if($proceso_obj->getFechaS() != '0000-00-00 00:00:00'){
						$idCompanais[] = $compania->getIdCompania();
					}
				}
			}
		
			$horasConsumidas = 0;
			$diasEnEtapa = 0;
			if(is_array($idCompanais)){
				
				foreach($idCompanais as $compania){			
					$horasConsumidas += intval($this->_calcularHorasConsumidas(intval($compania), $filtroSemana, 1));
					
					$diasEnEtapa += intval(($horasConsumidas / 24));
					$horasConsumidas = 0;	
				}
			}
			$promedio = (count($idCompanais) > 0)?($diasEnEtapa/count($idCompanais)):0;
			$promedio = round($promedio, 2);
			if($promedio < 0){
				$promedio *= (-1); 
			}
			$registros[$semana]["promedio"] = $promedio;
			$totalTarget += $promedio;
			
			
		}
		$strCat .= "</categories>";
		$strPromedio = "<dataset seriesName='Promedio de Dias'>";
		
		foreach ($registros as $semana ) {
			$strPromedio .= "<set value='" . $semana ["promedio"] . "' />";
		}
		$strPromedio .= "</dataset>";
		$strCat .= $strPromedio;
		$promedioTarget = ($totalTarget/count($this->_semanaArray));
		$promedioTarget = number_format($promedioTarget, 2, '.', '');
		
		$strXML = "<chart caption='Promedio de Dias en Etapa ONAPI' lineThickness='1' formatNumberScale='0' anchorRadius='2' divLineAlpha='20' divLineColor='CC3300' divLineIsDashed='1' showAlternateHGridColor='1' alternateHGridColor='CC4400' shadowAlpha='40' labelStep='1' numvdivlines='5' chartRightMargin='35' bgColor='FFFFFF' bgAngle='270' bgAlpha='10,10' alternateHGridAlpha='5'  legendPosition ='RIGHT ' bordercolor='FFFFFF' xAxisName='Semanas' showValues='0' numberPrefix=''>";
		$strTarg = "<trendlines> 
                          <line startValue='$promedioTarget' color='f6bd0f' displayValue='Target' showOnTop='2'/>
                       </trendlines></chart>";  
		$strXML .= $strCat.$strTarg;
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/MSLine.swf", "ChartId6", $strXML, "sACsa", 480, 250, 0, 0 );
		
	}
	
	/**
	 * 
	 * RETORNA UN GRAFICO TIPO PASTEL CON LA CANTIDAD DE SERVICIOS
	 * APROBADOS EN ONAPI Y LOS QUE ESTAN OBJETADOS 
	 */
	
	public function getAprovadosVsObjetados()
	{
	
		$filtroSemana = "";
		
		$totalAprobados = 0;
		$totalObjetados = 0;
		
		foreach ($this->_semanaArray as $semana => $fecha ) {
			$filtroSemana = $fecha [0];
			break;
		}
		
		$strXML = "<chart caption = 'Servicios Aprobados ONAPI vs. Objetados' baseFontSize='11' showValues='1' xAxisName=''>";
		
		$companiasProcesos = $this->mprocesos->ObtenerProcesosAgrupados('IdCompania', 1, $filtroSemana, false, 0);
		$companiasProcesosObjetados = $this->mprocesos->ObtenerProcesosAgrupados('IdCompania', 25, $filtroSemana, false, 0);
	
		if(is_array($companiasProcesosObjetados)){
			
     			foreach($companiasProcesosObjetados as $compania){
				
     				/*
		   			 * Validacion de el primer proceso
		   			 * si el id_proceso del registro $companiasProcesos es diferente 
		   			 * de su primere id_proceso de la etapa.  
		   			 * */
     				
		   			if ($compania->getIdProceso() != $this->mprocesos->obtenerPrimerProsesoPorEtapa($compania->getIdEtapa(), $compania->getIdCompania()))
		   			    continue;
     					
		   			    $totalObjetados++;
					
				}
		}

		if(is_array($companiasProcesos)){
			foreach($companiasProcesos as $compania){
				$procesos = $this->mprocesos->loadProcesosPorIdCompania($compania->getIdCompania(), array(1,25), 0, $filtroSemana);
				$objetados = false;
				$pasoObjecion = false;
			
				foreach($procesos as $proceso){
					if($proceso->getIdEtapa() == 25 || ($proceso->getIdEtapa() == 1 && $proceso->getFechaS() == '0000-00-00 00:00:00')){
						$objetados = true;
						if($proceso->getIdEtapa() == 25 && $proceso->getFechaS() != '0000-00-00 00:00:00'){
							$pasoObjecion = true;
						}
					}
				}
				if($objetados == false){
					$totalAprobados++;
				}
					
			}
			
		}
		$strXML .= "<set label = 'Aprobados' value ='" .(int) $totalAprobados . "'/>";
		$strXML .= "<set label = 'Objetados' value ='" .(int) $totalObjetados . "'/>";
		
		$totalAprobados = 0;
		
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/Pie3D.swf", "ChartId5", $strXML, "Pizza", 375, 250, false );

	}
	
	/**
	 * 
	 * RETORNA UN GRAFICO TIPO PASTEL CON LA CANTIDAD DE SERVICIOS
	 * OBJETADOS CLASIFICADOS POR TIPO DE SERVICIO
	 */
	
	public function getObjecionesPorServicio()
	{
		
		$filtroSemana = "";
		
		$totalExpress = 0;
		$totalNombre = 0;
		$totalPropias = 0;
		$totalOtros = 0;
		
		foreach ($this->_semanaArray as $semana => $fecha ) {
			$filtroSemana = $fecha [0];
			break;
		}
		
		$strXML = "<chart caption = 'Objeciones por Tipo de Servicio' baseFontSize='11' showValues='1' xAxisName=''>";
		$companiasProcesosObjetados = $this->mprocesos->ObtenerProcesosAgrupados('IdCompania', 25, $filtroSemana, false, 0);
		
		if(is_array($companiasProcesosObjetados)){
				foreach($companiasProcesosObjetados as $objetada){
					
					if ($objetada->getIdProceso() != $this->mprocesos->obtenerPrimerProsesoPorEtapa($objetada->getIdEtapa(), $objetada->getIdCompania()))
		   			    continue;
						
						if($compania = $this->mcompania->LoadCompaniaById($objetada->getIdCompania()) == true){
							
							$compania = $this->mcompania->LoadCompaniaById($objetada->getIdCompania());
					   		if($compania->getIdServicio() == 1){
					   			$totalExpress++;
					   		}
					   		else if($compania->getIdServicio() == 9){
					   			$totalNombre++;
					   		}
					   		else if($compania->getIdServicio() == 2){
					   			$totalPropias++;
					   		}else{
					   			$totalOtros++;
					   		}
					   	}else{
					   			$compania = $this->companiahistorico->loadComapniaHistoricoById($objetada->getIdCompania());
					   			
						   		if($compania->getIdServicio() == 1){
						   			$totalExpress++;
						   		}
						   		else if($compania->getIdServicio() == 9){
						   			$totalNombre++;
						   		}
						   		else if($compania->getIdServicio() == 2){
						   			$totalPropias++;
						   		}else{
						   			$totalOtros++;
						   		}	
					   	}
				}
				
			}
		
		$strXML .= "<set label = 'Nombre' value ='" .(int) $totalNombre . "'/>";
		$strXML .= "<set label = 'Propias' value ='" .(int) $totalPropias . "'/>";
		$strXML .= "<set label = 'Express' value ='" .(int) $totalExpress . "'/>";
		$strXML .= "<set label = 'Otros' value ='" .(int) $totalOtros . "'/>";
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML (base_url () . "public/swf_charts/Pie3D.swf", "ChartId8", $strXML, "Pizza", 375, 250, false );

	}
	
	 /** Retorna un grafico tipo BARRA/LINEAL con la efectividad
	 * de las companias que se encuentran en etapa ONAPI por semanas
	 * vs la cantidad de esas companias
	 **/
	
	public function getObjetadosVsPorcentaje()
	{
			
     		$registro = array();
     		
     		$strCat = "<categories>";
   
     		foreach($this->_semanaArray as $semana => $fecha){
     		
			    $filtroSemana ['inicial'] = $fecha [0];
			
				$filtroSemana ['final'] = $fecha [1];
			
				$semanaDetalle = explode("-", $semana);		
		     		
		        $strCat .= "<category label='".$semanaDetalle[0]."'/>";
		        //
		       	//	  OBTENGO LOS PROCESOS AGRUPADOS POR ID DE COMPANIA
		       	//
		       	$totalObjetados = 0;
		       	
		   		$totalRegistrosObjetados = $this->mprocesos->ObtenerProcesosAgrupados('IdCompania', 25, $filtroSemana, false, 0);
		       
	     		if(is_array($totalRegistrosObjetados)){
			
	     			foreach($totalRegistrosObjetados as $compania){
					
	     				/*
			   			 * Validacion de el primer proceso
			   			 * si el id_proceso del registro $companiasProcesos es diferente 
			   			 * de su primere id_proceso de la etapa.  
			   			 * */
	     				
			   			if ($compania->getIdProceso() != $this->mprocesos->obtenerPrimerProsesoPorEtapa($compania->getIdEtapa(), $compania->getIdCompania()))
			   			    continue;
	     				
			   			    $totalObjetados++;
						
					}
				}
				$totalOnapi= 0;
		   		$totalRegistrosOnapi = $this->mprocesos->ObtenerProcesosAgrupados('IdCompania', 1, $filtroSemana, false, 0);
		   		
	     		if(is_array($totalRegistrosOnapi)){
					foreach($totalRegistrosOnapi as $compania){
						
						if ($compania->getIdProceso() != $this->mprocesos->obtenerPrimerProsesoPorEtapa($compania->getIdEtapa(), $compania->getIdCompania()))
			   			    continue;
	     				
			   			    $totalOnapi++;
					}
					
				}
		 
		   		$porcentajeObjetado = ($totalOnapi-$totalObjetados <= 0)?0:($totalObjetados / ($totalOnapi-$totalObjetados));
		   		$porcentajeObjetado = round($porcentajeObjetado,2);
		   		$valorBarra = $totalObjetados;
		   		
		   		$registro[$semana]["companias"] = $valorBarra; 
		          
		        $registro[$semana]["cantidad"] = $porcentajeObjetado;
		           
		        $valorBarra = 0;
		        $porcentajeObjetado = 0;
		        $totalObjetados = 0;
		     } 
		 $strCat .= "</categories>";
		 
		 $strCantidadObjetados = "<dataset seriesName='Cantidad Objetados'>";
		 $strPorcentaje  = "<dataset  seriesName='Porcentaje Objetados' parentYAxis='S'>";
	
		 foreach ($registro as $semana){
		     $strCantidadObjetados  .= "<set value='".$semana["companias"]."'/>";
		     $strPorcentaje  .= "<set value='".$semana["cantidad"]."'/>";	  
		 }
		 
		 $strCantidadObjetados  .= "</dataset>";
		 $strPorcentaje  .= "</dataset>";
		
		 $strCat .= $strCantidadObjetados;
		 $strCat .= $strPorcentaje;
		 
		$strXML  = "<chart palette='1' caption='Cantidad de Objetados vs. Porcentaje de Objetados' showLabels='1' showvalues='0'  sYAxisValuesDecimals='2' connectNullData='0' PYAxisName='' SYAxisName=''  snumberSuffix='%2525' numDivLines='4' formatNumberScale='0'>";
		$strXML .=$strCat;
		$strXML .= "</chart>";
		return $this->chgraficos->renderChartHTML(base_url()."public/swf_charts/MSColumn3DLineDY.swf", "ChartId54", $strXML, "sACsa", 499,250, 0, 0);
	}

	/** Retorna un grafico tipo BARRA con el promedio
	 * de los dias retrazados
	*/
	
	public function getPromedioDiasRetrazados()
	{
		 $registros = array();
		 $this->_detallesRetrazo = array();
		 $strCat = "<categories>";
		 
		 foreach($this->_semanaArray as $semana => $fecha){
					 
		          $fechaI = $fecha[0];
		          $fechaF = $fecha[1];
		          $diasDiferencia = 0;
		          
		          $semanaDetalle = explode("-", $semana);
		          
		          $where = array("FechaSysProceso >= "   =>$fechaI,
					             "FechaSysProceso <= "   =>$fechaF,
		     	  				 "clasificacion_proceso" => 4);
		
		          
		          $strCat .= "<category label='" . $semanaDetalle[0]."'/>";
		           
		          $procesos = $this->mprocesos->loadProcesosByArray($where);
		          $diasTotal = 0;    
		          if(is_array($procesos)){
			          foreach ($procesos as $process){
			       
			          	 if($process->getFechaSys() <= $process->getFechaProceso()){
								$dias = 0;	
									
			          	 }else{
			         			if($compania = $this->mcompania->LoadCompaniaById($process->getIdCompania()) == true){
			         				$compania = $this->mcompania->LoadCompaniaById($process->getIdCompania());
			         			}else{
			         				$compania = $this->companiahistorico->loadComapniaHistoricoById($process->getIdCompania());
			         			}
			          			$etpas = $this->metapas->LoadEtapaById($process->getIdEtapa());
			          	 		$usuarios = $this->usuarios->LoadUsuarioById($process->getIdUsuario());
			          	 		$dias = $this->chcalendario->calcularDias($process->getFechaProceso(), $process->getFechaSys());
			          	 
			          	 		$diasDiferencia += $dias;
			          	 		
			          	 		$datos = array();
			          	 		$datos['semanaActual'] = $semana;
			          	 		$datos['referencia'] = $compania->getNombreCompania();
					    		$datos['etapa'] =  $etpas->GetNombre();
					    		$datos['fecha'] = $process->getFechaSys();
					  			$datos['fechaR'] = $process->getFechaProceso();
					    		$datos['diferencia'] = $diasDiferencia;
					    		$datos['usuario'] = $usuarios->getNombreUsuario();
					    		  
					    		$this->_detallesRetrazo[] = $datos;
					    		$diasTotal += $diasDiferencia;
					    		
							}
			          	
			          }
			
		      }		
		     	
		         $registros[$semana]["totalDiasRetrazo"] = $diasTotal;
		       
			 }
			    	
	        $strCat .= "</categories>";
		
		    $strDiasRetrazo = "<dataset seriesName='Promedio de Dias Retrazados'>";
		
		    foreach ( $registros as $semana ){
		    	
			   	$strDiasRetrazo .= "<set value='" . $semana ["totalDiasRetrazo"] ."'/>";
			  
			}

			$strDiasRetrazo .= "</dataset>";
		
		    $strCat .= $strDiasRetrazo;
			
			$strXML  = "<chart palette='1' caption='Promedio de dias Retrazados Categoria (ONAPI)' showLabels='1' showvalues='0'  sYAxisValuesDecimals='2' connectNullData='0' PYAxisName='' SYAxisName=''  numDivLines='4' formatNumberScale='0'>";
			$strXML .= $strCat;
			$strXML .= "</chart>";
			
			return $this->chgraficos->renderChartHTML(base_url()."public/swf_charts/MSColumn3DLineDY.swf", "ChartId54", $strXML, "sACsa", 499,250, 0, 0);
				 	
	}
	/**
	 * 
	 * RETORNA UN GRAFICO TIPO WIDGET CON EL PROMEDIO DE LAS ULTIMAS 4 SEMANAS MAS RECIENTES...
	 */
	public function getPromedioUltimasSemanas()
	{
		/*$etapas = 1;
            $this->_semanaArray = array_reverse($this->_semanaArray);
           
            
            
            */
            
            //foreach($this->_semanaArray as $semana => $fecha){
            $this->_semanaArray = array_reverse($this->_semanaArray);
        $etapas = 1;
        $aux = 1;
        $valorBarraTotal = 0;
			
             foreach($this->_semanaArray as $semana => $fecha){
             	
             	if($aux > 1 && $aux <= 5){	
		          $fechaI = $fecha[0];
		          $fechaF = $fecha[1];
		          $filtroFecha['inicial'] = $fechaI;
		          $filtroFecha['final']   = $fechaF;
		          $resurtado = 0;
		          $totalDeRegistros = 0;
		          $valor = 0;
		         
		          
		          $companiasProcesos = $this->mprocesos->ObtenerProcesosAgrupados('IdCompania', $etapas, $filtroFecha);
		         
		          if(is_array($companiasProcesos)){
		    
		        
		          foreach ($companiasProcesos as $registroDetallado){

		          	    $horasProceso = 0;
		          	
		          	    if ($this->mprocesos->obtenerPrimerProsesoPorEtapa($registroDetallado->getIdEtapa(), $registroDetallado->getIdCompania()) != $registroDetallado->getIdProceso())
		          	    	continue;
		          	    
		          	    
						$totalDeRegistros++;
						
		          	    $tiempoEstimado =  $this->metapas->LoadEtapaById($registroDetallado->getIdEtapa())->GetTiempoEstimado();  
						
		          	    $todosProcesos = $this->mprocesos->loadProcesosPorIdCompania($registroDetallado->getIdCompania(), $registroDetallado->getIdEtapa());
		          	    $datos = array();
		          	    $cantidadHoras = 0;
		          	    foreach ($todosProcesos as $procesosDetalles){
		          	    	
		          	       $fechaFinal = ($procesosDetalles->getFechaS() == '0000-00-00 00:00:00') ? date("Y-m-d H:i:s"):$procesosDetalles->getFechaS();
		          	    	
		          	       $horasProceso += $this->chcalendario->calcularHoras($procesosDetalles->getFechaProceso(), $fechaFinal);
		          	   
		          	    $etpas = $this->metapas->LoadEtapaById($procesosDetalles->getIdEtapa());
		          	    $companias = $this->companiashistoricaactivasmodel->loadRegistroById($procesosDetalles->getIdCompania());
		          	   
						$cantidadHoras +=number_format($horasProceso, 2, '.', '');
					   
		          	  }
		          	  	
		          	$resurtado = ($horasProceso > ($tiempoEstimado*24)) ? 0:1;
		          	$datos['semanaActual'] = $semana;
		            //$datos['referencia'] = $companias->getNombre();
					$datos['etapa'] = $etpas->GetNombre();
					$datos['horas_consumidas'] = $cantidadHoras;
					$datos['horas_permitidas'] = $tiempoEstimado*24;
					$datos['diferencia'] = intval($datos['horas_permitidas']) - intval($datos['horas_consumidas']);
					$datos['valoracion'] = $resurtado;
					
					
					if($resurtado > 0){
		                	
								$valor += $resurtado;	
								
						}
							$this->_detalles[] = $datos;
							  
		           }
		         }
		         
		        $valorBarra = ($totalDeRegistros > 0)?($valor/$totalDeRegistros):0;
		   		$valorBarra = $valorBarra * 100;
		   		$valorBarra = number_format($valorBarra, 2);
		   		$valorBarraTotal += $valorBarra;
		   		
             }
		     $aux++;
            }     
		
		$promedio = ($valorBarraTotal/4);
        
         $strXML = "<chart bgAlpha='0' bgColor='FFFFFF' lowerLimit='0' upperLimit='100' numberSuffix='%25' showBorder='0' basefontColor='424242' chartTopMargin='25' chartBottomMargin='25' chartLeftMargin='25' chartRightMargin='25' toolTipBgColor='80A905' gaugeFillMix='{dark-10},FFFFFF,{dark-10}' gaugeFillRatio='3'>
		  
                     <colorRange>
                     <color minValue='0' maxValue='45' code='FF654F'/>
                     <color minValue='45' maxValue='80' code='F6BD0F'/>
                     <color minValue='80' maxValue='100' code='8BBA00'/>
                     </colorRange>

                     <dials>
                     	<dial value='".$promedio."' rearExtension='1'/>
                     </dials>
                    
            
                     <annotations>
                     <annotationGroup id='Grp1' showBelow='1'>
                     <annotation type='rectangle' x='5' y='5' toX='500' toY='250' radius='10' color='ffffff' showBorder='0'/>
                     </annotationGroup>
                     </annotations>
                      
                     
                     <styles>
                     	<definition>
                     		<style name='RectShadow' type='shadow' strength='0'/>
                     		<style name='trendvaluefont' type='font' bold='1' borderColor='f5522f'/>
                     	</definition>
                     	
                     	<application>
                     	   <apply toObject='Grp1' styles='RectShadow'/>
                     	   <apply toObject='Trendvalues' styles='trendvaluefont'/>
                     	</application>
                     	</styles>
                     </chart>";     	 
 		   
		  return $this->chgraficos->renderChartHTML(base_url()."public/swf_charts/AngularGauge.swf", '' ,$strXML, '', 980, 200, 0, 0);
  
	}

	
	/**
	 * 
	 * UTILIZO ESTA FUNCION PARA CALCULAR LA CANTIDAD DE HORAS PARTIENDO DE 2 FECHAS DADAS
	 * @param unknown_type $fechaSys
	 * @param unknown_type $fechaS
	 */

	public function temp($fechaSys = false, $fechaS = false)
	{
	 $horas = $this->chcalendario->calcularHoras($fechaSys, $fechaS);
	 echo round($horas,2);
	 exit();
	}
}
